package cn.iocoder.yudao.module.api.product.sku.dto;

import jakarta.annotation.Nonnull;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

import static cn.iocoder.yudao.module.api.product.ConfigConstants.PROPERTY_VALUE_NAME_DEFAULT;

/**
 * 产品 SKU 信息 Response DTO
 *
 * @author LeeYan9
 * @since 2022-08-26
 */
@Data
public class ProductSkuRespDTO extends PriceRespDTO {

    /**
     * 产品 SKU 编号，自增
     */
    private Long id;
    /**
     * 店铺编号
     */
    private Long shopId;
    /**
     * SPU 编号
     */
    private Long spuId;

    /**
     * 属性数组
     */
    private List<ProductPropertyValueRespDTO> properties;

    @Nonnull
    public List<ProductPropertyValueRespDTO> getProperties() {
        if (properties == null) {
            return new ArrayList<>();
        }
        return properties;
    }

    /**
     * 属性值
     */
    private String propertiesValue;

    @SuppressWarnings("unused")
    public String getPropertiesValue() {
        if (propertiesValue != null) {
            return propertiesValue;
        }
        return getProperties().stream()
                .map(ProductPropertyValueRespDTO::getValueName)
                .filter(it -> !PROPERTY_VALUE_NAME_DEFAULT.equals(it))
                .reduce((a, b) -> a + "+" + b)
                .orElse("");
    }

    /**
     * SKU 的条形码
     */
    private String barCode;
    /**
     * 图片地址
     */
    private String picUrl;
    /**
     * 库存
     */
    private Integer stock;
    /**
     * 产品重量，单位：kg 千克
     */
    private Double weight;
    /**
     * 产品体积，单位：m^3 平米
     */
    private Double volume;

    /**
     * 一级分销的佣金，单位：分
     */
    private Integer firstBrokeragePrice;
    /**
     * 二级分销的佣金，单位：分
     */
    private Integer secondBrokeragePrice;

    /**
     * 供应方名称
     */
    private String supplyName;
    /**
     * 供应方关联编号
     */
    private Long supplyRelatedId;

}
